package com.syezon.wifikey.safe;

import android.app.Application;
import android.arch.lifecycle.AndroidViewModel;
import android.arch.lifecycle.MutableLiveData;
import android.support.annotation.NonNull;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * Created by 齐超波 on 2018/9/16.
 */

public class SafeCheckViewModel extends AndroidViewModel {

    private MutableLiveData<List<SafeCheckItemInfo>> safeCheckLiveData = new MutableLiveData<>();
    private MutableLiveData<Boolean> checkFinishLiveData = new MutableLiveData<>();


    public SafeCheckViewModel(@NonNull Application application) {
        super(application);
    }

    public MutableLiveData<List<SafeCheckItemInfo>> getSafeCheckLiveData() {
        return safeCheckLiveData;
    }

    public MutableLiveData<Boolean> getCheckFinishLiveData() {
        return checkFinishLiveData;
    }

    public void startCheck() {
        new Thread() {
            @Override
            public void run() {
                int checkItemOrderOffset = 10;
                List<SafeCheckItemInfo> safeCheckItemInfos = new ArrayList<>();
                SafeCheckItemInfo wifiTestTitle = new SafeCheckItemInfo();
                wifiTestTitle.setType(SafeCheckItemInfo.TYPE_TITLE);
                wifiTestTitle.setTitle("安全检测");
                wifiTestTitle.setTotal(6);
                wifiTestTitle.setFinish(false);
                wifiTestTitle.setOrder(checkItemOrderOffset);
                safeCheckItemInfos.add(wifiTestTitle);

                SafeCheckItemInfo itemWifi1 = new SafeCheckItemInfo();
                itemWifi1.setType(SafeCheckItemInfo.TYPE_CHECK_ITEM);
                itemWifi1.setTitle("检查网络是否被监听");
                itemWifi1.setFinish(false);
                itemWifi1.setOrder(checkItemOrderOffset + 1);
                safeCheckItemInfos.add(itemWifi1);
                safeCheckLiveData.postValue(safeCheckItemInfos);
                pause(200);
                itemWifi1.setFinish(true);
                safeCheckLiveData.postValue(safeCheckItemInfos);

                SafeCheckItemInfo itemWifi2 = new SafeCheckItemInfo();
                itemWifi2.setType(SafeCheckItemInfo.TYPE_CHECK_ITEM);
                itemWifi2.setTitle("检查是否为钓鱼WiFi");
                itemWifi2.setFinish(false);
                itemWifi2.setOrder(checkItemOrderOffset + 2);
                safeCheckItemInfos.add(itemWifi2);
                safeCheckLiveData.postValue(safeCheckItemInfos);
                pause(200);
                itemWifi2.setFinish(true);
                safeCheckLiveData.postValue(safeCheckItemInfos);

                SafeCheckItemInfo itemWifi3 = new SafeCheckItemInfo();
                itemWifi3.setType(SafeCheckItemInfo.TYPE_CHECK_ITEM);
                itemWifi3.setTitle("检查是否遭到DNS劫持");
                itemWifi3.setFinish(false);
                itemWifi3.setOrder(checkItemOrderOffset + 3);
                safeCheckItemInfos.add(itemWifi3);
                safeCheckLiveData.postValue(safeCheckItemInfos);
                pause(200);
                itemWifi3.setFinish(true);

                SafeCheckItemInfo itemNet1 = new SafeCheckItemInfo();
                itemNet1.setType(SafeCheckItemInfo.TYPE_CHECK_ITEM);
                itemNet1.setTitle("检查是否加密");
                itemNet1.setFinish(false);
                itemNet1.setOrder(checkItemOrderOffset + 4);
                safeCheckItemInfos.add(itemNet1);
                safeCheckLiveData.postValue(safeCheckItemInfos);
                pause(2000);
                itemNet1.setFinish(true);
                safeCheckLiveData.postValue(safeCheckItemInfos);

                SafeCheckItemInfo itemNet2 = new SafeCheckItemInfo();
                itemNet2.setType(SafeCheckItemInfo.TYPE_CHECK_ITEM);
                itemNet2.setTitle("检查Arp是否异常");
                itemNet2.setFinish(false);
                itemNet2.setOrder(checkItemOrderOffset + 5);
                safeCheckItemInfos.add(itemNet2);
                safeCheckLiveData.postValue(safeCheckItemInfos);
                pause(2000);
                itemNet2.setFinish(true);
                safeCheckLiveData.postValue(safeCheckItemInfos);

                SafeCheckItemInfo itemNet3 = new SafeCheckItemInfo();
                itemNet3.setType(SafeCheckItemInfo.TYPE_CHECK_ITEM);
                itemNet3.setTitle("检查是否存在SSL Strip攻击");
                itemNet3.setFinish(false);
                itemNet3.setOrder(checkItemOrderOffset + 6);
                safeCheckItemInfos.add(itemNet3);
                safeCheckLiveData.postValue(safeCheckItemInfos);
                pause(2000);
                itemNet3.setFinish(true);
                wifiTestTitle.setFinish(true);
                safeCheckLiveData.postValue(safeCheckItemInfos);

                int enhanceOrderOffset = 0;
                SafeCheckItemInfo checkEnahnceItem = new SafeCheckItemInfo();
                checkEnahnceItem.setType(SafeCheckItemInfo.TYPE_ENHANCE);
                checkEnahnceItem.setTitle("已经增强，当前信号99%");
                checkEnahnceItem.setOrder(enhanceOrderOffset);
                safeCheckItemInfos.add(checkEnahnceItem);

                SafeCheckItemInfo divider = new SafeCheckItemInfo();
                divider.setType(SafeCheckItemInfo.TYPE_DIVIDER);
                divider.setOrder(enhanceOrderOffset + 2);
                safeCheckItemInfos.add(divider);
                safeCheckLiveData.postValue(safeCheckItemInfos);
                Collections.sort(safeCheckItemInfos);

                checkFinishLiveData.postValue(true);
            }
        }.start();
    }

    private void pause(long time) {
        try {
            Thread.sleep(time);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
